iT邦幫忙

2022 iThome 鐵人賽

DAY 26
0
Modern Web

JS 忍者訓練計畫系列 第 26

從事件中倖存(上) Day25

  • 分享至 

  • xImage
  •  

在大 IE 還存在的時代,事件監聽的綁定要判斷不同的寫法,才有辦法兼容不同的瀏覽器。

這章想學到什麼?

  • 認識 DOM Level
  • 懷舊處理跨瀏覽器事件方式
  • 測試事件綁並API

程式碼閱讀練習與撰寫

懷舊處理跨瀏覽器事件方式

if (document.addEventListener) {

    this.addEvent = function(elem, type, fn) {
        elem.addEventListener(type, fn, false);
        return fn;
    }

    this.removeEvent = function(elem, type, fn) {
        elem.removeEventListener(type, fn, false);
    }

} else if (document.attachEvent) {
    this.addEvent = function(elem, type, fn) {
        var bound = function(){
            return fn.apply(elem, arguments);
        }
        elem.attachEvent("on" + type, bound);
        return bound;
    }

    this.removeEvent = function(elem, type, fn) {
        elem.detachEvent("on" + type, fn);
    }
}

測試事件綁並API

addEvent(window, "load", function(){
    var elems = document.getElementsByTagName("div")
    for (var i = 0; i < elems.length; i++) (function(elem){
        var handler = addEvent(elem, "click", function(){
             this.style.backgroundColor = this.style.backgroundColor === "" ? 'green' : '';
            removeEvent(elem, "click", handler)
        })
    })(elems[i])
})

參考資料

https://developer.mozilla.org/zh-CN/docs/Web/API/Document_Object_Model/Using_the_W3C_DOM_Level_1_Core
https://developer.mozilla.org/zh-CN/docs/Web/API/Document_Object_Model/Traversing_an_HTML_table_with_JavaScript_and_DOM_Interfaces


上一篇
跨越屬性項、屬性與 CSS(下) Day24
下一篇
從事件中倖存(下) Day26
系列文
JS 忍者訓練計畫30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言